package com.water.note.service;

import com.water.note.common.PageResult;
import com.water.note.dto.LoginParam;
import com.water.note.dto.RegisterParam;
import com.water.note.dto.UserDTO;
import com.water.note.dto.UserUpdateParam;
import com.water.note.entity.User;

/**
 * 用户服务接口
 */
public interface UserService {
    
    /**
     * 用户登录
     *
     * @param loginParam 登录参数
     * @return 登录成功返回用户信息，登录失败返回null
     */
    UserDTO login(LoginParam loginParam);
    
    /**
     * 用户注册
     *
     * @param registerParam 注册参数
     * @return 注册成功返回用户信息，注册失败返回null
     */
    UserDTO register(RegisterParam registerParam);
    
    /**
     * 根据用户ID获取用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    UserDTO getUserById(Long userId);
    
    /**
     * 更新用户信息
     *
     * @param userId 用户ID
     * @param updateParam 更新参数
     * @return 更新后的用户信息
     */
    UserDTO updateUserInfo(Long userId, UserUpdateParam updateParam);
    
    /**
     * 修改密码
     *
     * @param userId 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否修改成功
     */
    boolean updatePassword(Long userId, String oldPassword, String newPassword);
    
    /**
     * 分页查询用户列表
     *
     * @param page 页码
     * @param pageSize 每页记录数
     * @param keyword 关键字
     * @return 用户列表
     */
    PageResult<UserDTO> listUsers(Integer page, Integer pageSize, String keyword);
    
    /**
     * 禁用或启用用户
     *
     * @param userId 用户ID
     * @param status 状态：0-禁用，1-启用
     * @return 是否操作成功
     */
    boolean updateUserStatus(Long userId, Integer status);
    
    /**
     * 删除用户
     *
     * @param userId 用户ID
     * @return 是否删除成功
     */
    boolean deleteUser(Long userId);
} 